package pres.lnk.learn.designpattern.o_command;

import pres.lnk.learn.designpattern.o_command.command.OffCommand;
import pres.lnk.learn.designpattern.o_command.command.OnCommand;
import pres.lnk.learn.designpattern.o_command.receiver.LightReceiver;
import pres.lnk.learn.designpattern.o_command.receiver.Receiver;

/**
 * <p>命令模式</p>
 * <pre>
 * 命令模式有三个角色：
 * Receiver 接受者角色：干活的角色
 * Command 命令角色：指挥接受者角色需要干什么活
 * Invoker 调用者角色：发起命令的人
 *
 * 优点： 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。
 * </pre>
 * @Author lnk
 * @Date 2018/4/13
 */
public class Main {
    public static void main(String[] args) {
        //接受者
        Receiver light = new LightReceiver();
        //调用接受者具体行为的命令
        OnCommand onCommand = new OnCommand(light);
        OffCommand offCommand = new OffCommand(light);
        //调用者使用命令让接受者干活
        Invoker client = new Invoker();
        client.execute(onCommand);
        client.execute(offCommand);
    }
}
